EDO.cpp a écrit :
#include "EDO.h"
#include <iostream>
EDO1::EDO1(int a)
{
N=a;
}
double EDO1::rk2 (double x0,double y0,double xf)
{
double f0=evalyp(x0,y0);
double h = (xf-x0)/N;
double k0=h*f0;
double xi=x0;
double yi=y0;
for(int i=0; i<N; i++)
{
double fi=evalyp(xi,yi);
double ki=h*fi;
yi=yi+h*evalyp(xi+h/2,yi+ki/2);
xi=xi+h;
}
return yi;
}
double EDO1::rk4(double x0,double y0,double xf)
{
double h=(xf-x0)/N;
double xi=x0;
double yi=y0;
for(int i=0; i<N; i++)
{
double fi=evalyp(xi,yi);
double k1=h*fi;
double k2=h*evalyp(xi+h/2,yi+k1/2);
double k3=h*evalyp(xi+h/2,yi+k2/2);
double k4=h*evalyp(xi+h, yi+k3);
yi=yi+(1.0/6)*(k1+2*k2+2*k3+k4);
xi=xi+h;
}
return yi;
}
double EDO1systeme::getyf()
{
return yf;
}
double EDO1systeme::getzf()
{
return zf;
}
void EDO1systeme::rk4(double x0, double y0, double z0, double xf)
{
double h=(xf-x0)/N;
double xi=x0;
double yi=y0;
double zi=z0;
for(int i=0; i<N; i++)
{
double fi= evalyp(xi,yi,zi);
double gi= evalzp(xi,yi,zi);
double k1= h*fi;
double l1= h*gi;
double k2= h*evalyp(xi+h/2,yi+k1/2,zi+l1/2);
double l2= h*evalzp (xi+h/2,yi+k1/2,zi+l1/2);
double k3= h*evalyp(xi+h/2,yi+k2/2,zi+l2/2);
double l3= h*evalzp(xi+h/2,yi+k2/2,zi+l2/2);
double k4= h*evalyp(xi+h,yi+k3,zi+l3);
double l4= h*evalzp(xi+h,yi+k3,zi+l3);
yi=yi+(1.0/6)*(k1+2*k2+2*k3+k4);
zi=zi+(1.0/6)*(l1+2*l2+2*l3+l4);
xtab=xi;
ytab=yi;
yptab= evalyp(xi,yi,zi);
ztab= zi;
zptab= evalzp(xi,yi,zi);
xi=xi+h;
}
yf=yi;
zf=zi;
}
double EDO2:: getypf()
{
return yf;
}
double EDO2::evalyp (double x, double y,double z)
{
return z;
}
double EDO2::evalzp (double x, double y,double z)
{
return evalys(x,y,z);
}
EDO1systeme::EDO1systeme (int n)
{
n=N;
xtab= new double[n];
ytab= new double[n];
yptab= new double [n];
ztab = new double[n];
zptab= new double [n];
}
EDO1systeme::~EDO1systeme()
{
delete []xtab;
delete []ytab;
delete []yptab;
delete []ztab;
delete []zptab;
}
void EDO1systeme::ecrirexyz(const char *tp2)
{
ofstream FichierSortie;
FichierSortie.open(tp2);
FichierSortie << setw(9)<<xtab<< setw(20)<<ytab<<setw(20)<<yptab<< setw(20)<<ztab<<setw(20)<<zptab<<endl;
}